Fullstack-Study

데이터베이스(Database)

1. 관계형 DB

1-1. 테이블 설계

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100) UNIQUE,
  created_at TIMESTAMP
);

1-2. 정규화(Normalization)

1-3. SQL 쿼리 작성

1-4. 인덱스(Index)

CREATE INDEX idx_user_email ON users(email);

1-5. 트랜잭션(ACID)

BEGIN TRANSACTION;
UPDATE accounts SET balance=balance-100 WHERE id=1;
UPDATE accounts SET balance=balance+100 WHERE id=2;
COMMIT;

2. 비관게형 DB(NoSQL)

2-1. Redis

// Java + Jedis 사용 예시
Jedis jedis = new Jedis("localhost");

// 캐시 저장
jedis.set("user:1001", "{'name':'홍길동','age':25}");
jedis.expire("user:1001", 3600); // 1시간 후 만료

// 캐시 조회
String userData = jedis.get("user:1001");

2-2. Key-Value 구조

{
  "user:1": {"name": "Alice", "age": 30}
}

3. DB 연동

3-1. JDBC

Connection conn = DriverManager.getConnection(url, user, pwd);
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id=?");
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();

3-2. Repository 패턴

public interface UserRepository extends JpaRepository<User, Integer> {
    List<User> findByName(String name);
}

3-3. Lazy / Eager Loading, N+1 문제

@OneToMany(fetch = FetchType.LAZY)
private List<Order> orders;